package day13.thread01;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/**
 * @author Xiao
 * @date 2021/8/5
 */
public class ThreadDemo03 {
    /**
     * ③    实现Callable的方式实现多线程
     * 	定义一个类MyCallable实现Callable接口
     * 	在MyCallable类中重写call()方法
     * 	创建MyCallable类的对象
     * 	创建Future的实现类FutureTask对象，把MyCallable对象作为构造方法的参数
     * 	创建Thread类的对象，把FutureTask对象作为构造方法的参数
     * 	启动线程
     * 	再调用get方法，就可以获取线程结束之后的结果。
     */
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        MyCallable mc1 = new MyCallable();
        MyCallable mc2 = new MyCallable();
        //可以获取线程执行完毕之后的结果，也可以作为参数传递给Thread对象
        FutureTask<String> ft1 = new FutureTask<>(mc1);
        FutureTask<String> ft2 = new FutureTask<>(mc2);
        //创建2个多线程对象
        Thread t1 = new Thread(ft1);
        Thread t2 = new Thread(ft2);
        //启动2个多线程
        t1.start();
        t2.start();
        //获取线程结束之后的结果
        System.out.println("ft1:" + ft1.get());
        System.out.println("ft2:" + ft2.get());
    }
}
